package com.eugenema.entity;

import com.alibaba.fastjson.JSONObject;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 更新信息
 *
 * @author Eugenema
 * @date 2023/10/25 22:21
 */
public class UpdateInfo {
    /**
     * 创建基础版本更新信息
     * <br/>基础版本号为 1.0.0
     *
     * @return 基础版本实体类
     * @author Eugenema
     * @date 2023/10/29 20:58
     **/
    public static UpdateInfo baseUpdatInfo() {
        UpdateInfo updateInfo = new UpdateInfo();
        updateInfo.setContent("基础版本");
        return updateInfo;
    }

    /** 更新类型：配置文件 */
    public static final Integer ACTION_CONFIG = 1;
    /** 更新类型：其他文件 */
    public static final Integer ACTION_OTHER = 2;
    /** 更新类型：脚本文件 */
    public static final Integer ACTION_SCRIPT = 3;

    /** 主程序版本号 */
    private String versionMain = "1.0.0";
    /** 升级程序版本号 */
    private String versionUpdate = "1.0.0";
    /** 更新内容 */
    private String content;
    /** 更新文件相对路径 */
    private String relativePath;
    /** 下载链接，若更新类型为 ACTION_OTHER，且 url 为空，则认定是删除文件 */
    private String url;
    /**
     * 更新/新增/删除（value 赋值空则是删除）的配置项或脚本
     * <br/> map 的 key 值：配置项时为配置名，脚本时为脚本 id
     * <br/> map 的 value 值：配置项时为配置内容，脚本时为脚本属性 + SeleniumXmlParseUtil.SEPARATOR_SCRIPT_UPDATE + 值
     */
    private Map<String, String> configs;
    /**
     * 更新类型，取值自本类的 ACTION_* 常量
     */
    private Integer action;
    /**
     * 更新时间
     */
    private Date updateTime;
    /**
     * 更新列表
     */
    private List<UpdateInfo> updateList;

    public String getVersionMain() {
        return versionMain;
    }

    public void setVersionMain(String versionMain) {
        this.versionMain = versionMain;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getRelativePath() {
        return relativePath;
    }

    public void setRelativePath(String relativePath) {
        this.relativePath = relativePath;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public Integer getAction() {
        return action;
    }

    public void setAction(Integer action) {
        this.action = action;
    }

    public List<UpdateInfo> getUpdateList() {
        return updateList;
    }

    public void setUpdateList(List<UpdateInfo> updateList) {
        this.updateList = updateList;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public Map<String, String> getConfigs() {
        return configs;
    }

    public void setConfigs(Map<String, String> configs) {
        this.configs = configs;
    }

    public String getVersionUpdate() {
        return versionUpdate;
    }

    public void setVersionUpdate(String versionUpdate) {
        this.versionUpdate = versionUpdate;
    }

    @Override
    public String toString() {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("versionMain", getVersionMain());
        jsonObject.put("versionUpdate", getVersionUpdate());
        jsonObject.put("content", getContent());
        jsonObject.put("updateTime", getUpdateTime());
        return jsonObject.toString();
    }
}
